<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//Ultima verificacion: 02-03-2015
class Sancion extends CI_Controller {
	//Metodo constructor de la clase
	function __construct(){
		parent::__construct();
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra un listado con todas las sanciones activas o inactivas pero NO las borradas segun los filtros aplicados
	//Filtros:
	//Si idCicloLectivo es igual a cero, hay que mostrar todas las sanciones existentes del ciclo vigente
	//Si idCicloLectivo es distinto de cero, hay que mostrar solo las sanciones del ciclo en cuestion.
	//Si idAxD (id Alumno x division) es igual a cero hay que mostrar todas las sanciones
	//Si idAxD es distinto de cero, solo hay que mostrar las sanciones de ese alumno
	function consultar($idCicloLectivo=null, $idAxD=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == '1')){
			//Segunda comprobacion: Que idCicloLectivo pasado sea numerico y mayor o igual que cero. Lo mismo para idAxD
			if(is_numeric($idCicloLectivo) && $idCicloLectivo>=0 && is_numeric($idAxD) && $idAxD>=0){
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para corroborar que exista
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Cargo el modelo donde estan los datos de los alumnos x division
				$this->load->model('m_alumnoxdivision');
				
				//Busco al alumno para corroborar que exista
				$alumno = $this->m_alumnoxdivision->get($idAxD);
				
				//Tercera comprobacion: Que el ciclo lectivo pasado por la url sea existente o bien el id sea igual a cero. Lo mismo para idAxD
				if(($cicloLectivo->num_rows() == 1 || $idCicloLectivo==0) && ($alumno->num_rows() == 1 || $idAxD==0)){
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los ciclos lectivos
					$listadoCiclosLectivos = $this->m_ciclo_lectivo->buscar();
					
					//Le paso el listado de todos los ciclos lectivos a la vista para que los muestre en un combo de filtrado
					$datos['ciclosLectivos'] = $listadoCiclosLectivos;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Le pasamos a la vista cual es el ciclo lectivo que debe mostrar seleccionado en el combo de filtrado
					//Si el ciclo lectivo pasado por la url es igual a cero entonces hay que seleccionar el ciclo vigente, en caso contrario el que haya sido pasado
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							//Le paso a la vista el id del ciclo lectivo vigente
							$datos['idCicloLectivoSel'] = $cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							//No hay ciclo lectivo seleccionado ni vigente
							$datos['idCicloLectivoSel'] = 0;
						}
					}else{
						//Le paso a la vista el id del ciclo lectivo pasado por la url
						$datos['idCicloLectivoSel'] = $idCicloLectivo;
					}
					
					//Le paso a la vista el id del alumno pasado por la url
					$datos['idAxDSel'] = $idAxD;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Restricciones a la consulta de la busqueda de sanciones y alumnos segun el ciclo lectivo seleccionado y persona (Se muestran en la tabla)
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$restriccion = "";
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							$restriccion = " AND curso.idCicloLectivo=".$cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							$restriccion = " AND curso.idCicloLectivo=0";
						}
					}else{
						$restriccion = " AND curso.idCicloLectivo=".$idCicloLectivo;
					}
					
					$restriccion2="";
					if($idAxD!=0){
						$restriccion2 = " AND alumnoxdivision.idAxD=".$idAxD;
					}
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los alumnos del ciclo segun las restricciones correspondientes, tanto activos como inactivos, menos los borrados(-1)
					//ATENCION: A VECES SE ESTA USANDO EL METODO BUSCAR Y A VECES EL METODO BUSCAR ACTIVOS, CUANDO SOLO DEBERIA EXISTIR UNO SOLO
					//YA QUE NO EXISTE EL ESTADO INACTIVO EN ESTA TABLA
					$listadoAlumnos = $this->m_alumnoxdivision->buscar($restriccion);
					
					//Le paso el listado de todos los alumnos a la vista para que las muestre en el combo
					$datos['alumnos'] = $listadoAlumnos;
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					
					//Cargo el modelo donde estan los datos de las sanciones registradas para pedirle un listado con todas ellas segun las restricciones
					$this->load->model('m_sancion');
					
					//Busco todas las sanciones segun las restricciones correspondientes, tanto activas como inactivoas, menos los borrados(-1)
					$listadoSanciones = $this->m_sancion->buscar($restriccion . $restriccion2);
					
					//Le paso el listado de todas las sanciones a la vista para que las muestre en una tabla
					$datos['sanciones'] = $listadoSanciones;
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
					
					//Cargo la vista donde se muestra la tabla de sanciones y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_sanciones', $datos, true);
					
					//Cargo la vista principal con los datos de la vista recien generada
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El o los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para consultar los registros.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo solo se puede llamar con ajax
	//Sirve para eliminar la sancion pasada por la url
	//El segundo y tercer parametro indica si hay que filtrar las sanciones en el resultado
	function eliminar($idSancion=null, $idCicloLectivo=null, $idAxD=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == '1')){
			//Segunda comprobacion: Que idSancion pasado sea numerico y mayor que cero. Ademas que idCicloLectivo pasado sea numerico y mayor o igual que cero. Lo mismo para idAxD.
			if(is_numeric($idSancion) && $idSancion>0 && is_numeric($idCicloLectivo) && $idCicloLectivo>=0 && is_numeric($idAxD) && $idAxD>=0){
				//Cargo el modelo donde estan los datos de las sanciones registrados
				$this->load->model('m_sancion');
				
				//Busco a la sancion que hay que eliminar para corroborar que exista
				$sancion = $this->m_sancion->get($idSancion);
				
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para corroborar que exista
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Cargo el modelo donde estan los datos de los alumnos x division
				$this->load->model('m_alumnoxdivision');
				
				//Busco al alumno para corroborar que exista
				$alumno = $this->m_alumnoxdivision->get($idAxD);
				
				//Tercera comprobacion: Que la sancion exista. Ademas que el ciclo lectivo pasado por la url sea existente, o bien sea cero. Lo mismo para el alumno.
				if($sancion->num_rows() == 1 && ($cicloLectivo->num_rows() == 1 || $idCicloLectivo==0) && ($alumno->num_rows() == 1 || $idAxD==0)){
					//Elimino a la sancion pasada por la url
					$respuesta = $this->m_sancion->eliminar($idSancion, $this->session->userdata('idUsuarioLog'));
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los ciclos lectivos
					$listadoCiclosLectivos = $this->m_ciclo_lectivo->buscar();
					
					//Le paso el listado de todos los ciclos lectivos a la vista para que los muestre en un combo de filtrado
					$datos['ciclosLectivos'] = $listadoCiclosLectivos;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Le pasamos a la vista cual es el ciclo lectivo que debe mostrar seleccionado en el combo de filtrado
					//Si el ciclo lectivo pasado por la url es igual a cero entonces hay que seleccionar el ciclo vigente, en caso contrario el que haya sido pasado
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							//Le paso a la vista el id del ciclo lectivo vigente
							$datos['idCicloLectivoSel'] = $cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							//No hay ciclo lectivo seleccionado ni vigente
							$datos['idCicloLectivoSel'] = 0;
						}
					}else{
						//Le paso a la vista el id del ciclo lectivo pasado por la url
						$datos['idCicloLectivoSel'] = $idCicloLectivo;
					}
					
					//Le paso a la vista el id del alumno pasado por la url
					$datos['idAxDSel'] = $idAxD;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Restricciones a la consulta de la busqueda de sanciones y alumnos segun el ciclo lectivo seleccionado y persona (Se muestran en la tabla)
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$restriccion = "";
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							$restriccion = " AND curso.idCicloLectivo=".$cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							$restriccion = " AND curso.idCicloLectivo=0";
						}
					}else{
						$restriccion = " AND curso.idCicloLectivo=".$idCicloLectivo;
					}
					
					$restriccion2="";
					if($idAxD!=0){
						$restriccion2 = " AND alumnoxdivision.idAxD=".$idAxD;
					}
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los alumnos del ciclo segun las restricciones correspondientes, tanto activos como inactivos, menos los borrados(-1)
					//ATENCION: A VECES SE ESTA USANDO EL METODO BUSCAR Y A VECES EL METODO BUSCAR ACTIVOS, CUANDO SOLO DEBERIA EXISTIR UNO SOLO
					//YA QUE NO EXISTE EL ESTADO INACTIVO EN ESTA TABLA
					$listadoAlumnos = $this->m_alumnoxdivision->buscar($restriccion);
					
					//Le paso el listado de todos los alumnos a la vista para que las muestre en el combo
					$datos['alumnos'] = $listadoAlumnos;
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					
					//Cargo el modelo donde estan los datos de las sanciones registradas para pedirle un listado con todas ellas segun las restricciones
					$this->load->model('m_sancion');
					
					//Busco todas las sanciones segun las restricciones correspondientes, tanto activas como inactivoas, menos los borrados(-1)
					$listadoSanciones = $this->m_sancion->buscar($restriccion . $restriccion2);
					
					//Le paso el listado de todas las sanciones a la vista para que las muestre en una tabla
					$datos['sanciones'] = $listadoSanciones;
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					
					//Cargo la vista donde se muestra la tabla de sanciones
					$this->load->view('v_sanciones', $datos);
				} else {
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					echo("No existe el registro seleccionado para borrar.");
				}
			} else {
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				echo("No se ha pasado los parametros necesarios para borrar un registro.");
			}			
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			echo("No tiene permiso para borrar un registro.");
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Abre la pantalla con el formulario para crear una sancion nueva
	//Los parametros se utilizan para volver al consultar seleccionando las opciones correctas. Ademas el ciclo lectivo se utiliza para seleccionar los alumnos del mismo.
	function abrirPantallaCrear($idCicloLectivo=null, $idAxD=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == '1')){
			//Segunda comprobacion: Que idCicloLectivo pasado sea numerico y mayor o igual que cero. Lo mismo para idAxD.
			if(is_numeric($idCicloLectivo) && $idCicloLectivo>=0 && is_numeric($idAxD) && $idAxD>=0){
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para comprobar que exista
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Cargo el modelo donde estan los datos de los alumnos x division
				$this->load->model('m_alumnoxdivision');
				
				//Busco al alumno para comprobar que exista
				$alumno = $this->m_alumnoxdivision->get($idAxD);
				
				//Tercera comprobacion: Que el ciclo lectivo pasado por la url sea existente o bien el id sea igual a cero. Lo mismo para el idAxD
				if(($cicloLectivo->num_rows() == 1 || $idCicloLectivo==0) && ($alumno->num_rows() == 1 || $idAxD==0)){
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de los tipos de sanciones
					$this->load->model('m_tipo_sancion');
					
					//Busco todos los tipos de sanciones activos
					$listadoTiposSanciones = $this->m_tipo_sancion->buscarActivos();
					
					//Le paso el listado de todos los tipos de sanciones a la vista para que los muestre en un combo seleccionable
					$datos['tiposSanciones'] = $listadoTiposSanciones;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Si el ciclo lectivo pasado por la url es igual a cero entonces hay que seleccionar el ciclo vigente, en caso contrario el del que haya sido pasado
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							//Le paso a la vista el id del ciclo lectivo vigente
							$datos['idCicloLectivoSel'] = $cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							//No hay ciclo lectivo seleccionado ni vigente
							$datos['idCicloLectivoSel'] = 0;
						}
					}else{
						//Le paso a la vista el id del ciclo lectivo pasado por la url
						$datos['idCicloLectivoSel'] = $idCicloLectivo;
					}
					
					//Le paso a la vista el idAxD seleccionado
					$datos['idAxDSel'] = $idAxD;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Restricciones a la consulta de la busqueda de alumnos segun el ciclo lectivo seleccionado
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$restriccion = "";
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							$restriccion = " AND curso.idCicloLectivo=".$cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							$restriccion = " AND curso.idCicloLectivo=0";
						}
					}else{
						$restriccion = " AND curso.idCicloLectivo=".$idCicloLectivo;
					}
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los alumnos del ciclo segun las restricciones correspondientes, tanto activos como inactivos, menos los borrados(-1)
					//ATENCION: A VECES SE ESTA USANDO EL METODO BUSCAR Y A VECES EL METODO BUSCAR ACTIVOS, CUANDO SOLO DEBERIA EXISTIR UNO SOLO
					//YA QUE NO EXISTE EL ESTADO INACTIVO EN ESTA TABLA
					$listadoAlumnos = $this->m_alumnoxdivision->buscar($restriccion);
					
					//Le paso el listado de todos los alumnos a la vista para que las muestre en el combo
					$datos['alumnos'] = $listadoAlumnos;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo la vista donde se muestra el formulario para crear una sancion y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_sanciones_crear', $datos, true);
					
					//Cargo la vista principal con los datos de la vista recien generada
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El registro seleccionado no existe
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//No se han pasado los parametros minimos necesarios para crear un registro
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo crea realmente la sancion. La respuesta se muestra en un iframe dentro del formulario
	function crear(){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == '1')){	   
			
			//Como pueden ser varios alumnos seleccionados, la variable debe ser un array
			$alumnos = $this->input->post('alumnoxdivision',true);
			
			//Segunda comprobacion: Que se haya pasado por post la fecha de ocurrencia, el tipo de sancion, los alumnos sancionados, el titulo y el estado de la sancion a crear.
			if($this->input->post('fechaOcurrencia',true)!="" && is_numeric($this->input->post('tipoSancion',true)) && $this->input->post('tipoSancion',true)>0 && is_array($alumnos) && count($alumnos)>=1 && $this->input->post('titulo',true) != "" && ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){		
				//Cargo el modelo donde estan los datos de los tipos de sanciones
				$this->load->model('m_tipo_sancion');
				
				//Busco al tipo de sancion para comprobar que exista
				$tipoSancion = $this->m_tipo_sancion->get($this->input->post('tipoSancion',true));
				
				//Tercera comprobacion: Que el tipo de sancion pasado por la url sea existente.
				if($tipoSancion->num_rows() == 1){
					//Cargo el modelo donde estan los datos de los archivos
					$this->load->model('m_archivo');
					
					//Detalles de las configuraciones del archivo a subir
					$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/sanciones";
					$config['allowed_types'] = 'gif|jpg|png|jpeg|doc|docx|xls|xlsx|pdf|ppt|xppt|pps';
					$config['max_size'] = '10000';
					$this->load->library('upload', $config);
					
					$ultimoIdInsertado = 0;
					$archivo = '';
					//Si no se subio el archivo hacer lo siguiente
					if (!$this->upload->do_upload('archivo')){
						$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones.';
					//Si se subio el archivo hacer lo siguiente
					}else{
						//Datos del archivo subido
						$upload_data = $this->upload->data();
						$archivo = $upload_data['file_name'];
						$extensionArchivo = $upload_data['file_ext'];
						
						//Mensaje que se va a mostrar
						$mensaje = 'Se ha subido el archivo correctamente.';
						
						// Determine Content Type
						switch ($upload_data['file_ext']) {
						  case ".pdf": $ctype="application/pdf"; break; 
						  case ".exe": $ctype="application/octet-stream"; break; 
						  case ".zip": $ctype="application/zip"; break; 
						  case ".doc": $ctype="application/msword"; break; 
						  case ".xls": $ctype="application/vnd.ms-excel"; break; 
						  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break; 
						  case ".gif": $ctype="image/gif"; break; 
						  case ".png": $ctype="image/png"; break; 
						  case ".jpeg": 
						  case ".jpg": $ctype="image/jpg"; break; 
						  default: $ctype="application/force-download"; 
						}
						
						//Creamos el archivo en la base de datos
						$resultado = $this->m_archivo->crear(random_string('alnum',20).$upload_data['file_ext'], $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/sanciones", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
						$ultimoIdInsertado = $this->db->insert_id();
					}
										
					//Cargo el modelo donde estan los datos de las sanciones
					$this->load->model('m_sancion');
					
					//Formato fecha ARGENTINA
					$fecha1=$this->input->post('fechaOcurrencia',true);
					//Formato fecha EEUU
					if($fecha1!="")$fecha2=date("Y-m-d",strtotime($fecha1));
					else $fecha2=null;
					
					//Cargo el modelo donde estan los datos del timeline para cargar la novedad.
					$this->load->model('m_timeline');
					
					//Cargo el modelo donde estan los datos de los alumnos por division para comprobar que exista y sacar el id de la persona.
					$this->load->model('m_alumnoxdivision');
					
					$resultado=0;
					for ($i=0;$i<count($alumnos);$i++){
						//Que el id del alumno sea numerico y mayor que cero.
						if(is_numeric($alumnos[$i]) && $alumnos[$i]>0){
							//Busco al alumno para comprobar que exista.
							$alumnoPorDivision = $this->m_alumnoxdivision->get($alumnos[$i]);
							
							//Que el alumno exista.
							if($alumnoPorDivision->num_rows() == 1){
								//Creamos la sancion
								$resultadoParcial = $this->m_sancion->crear($fecha2, $this->input->post('tipoSancion',true), $alumnos[$i], $this->input->post('titulo',true), $this->input->post('descripcion',true), $ultimoIdInsertado, $this->input->post('estado',true), $this->session->userdata('idUsuarioLog'));
								$resultado += $resultadoParcial;
								
								if($resultadoParcial == 1){
									$ultimoRegistroCreado = $this->db->insert_id();
									//date("Y-m-d H:i:s")
									//Creamos el registro de la novedad. TipoOperacion, idTablaOrigen, idRegistroOrigen, idTablaDestino, idRegistroDestino, fechaPasada, fechaFutura, estado
									$this->m_timeline->crear(1, 1, $ultimoRegistroCreado, 21, $alumnoPorDivision->row()->idAlumno, date("Y-m-d H:i:s") ,null, 1);
								}
							}
						}
					}
					
					if($resultado == count($alumnos)){
						if(count($alumnos)==1)
							echo("<script> alert('La sanci\u00f3n: ".$this->input->post('titulo',true)." se ha creado correctamente. ".$mensaje."');</script>");
						else
							echo("<script> alert('Las ".count($alumnos)." sanciones: ".$this->input->post('titulo',true)." se han creado correctamente. ".$mensaje."');</script>");
					}else{
						echo("<script> alert('La sanci\u00f3n: ".$this->input->post('titulo',true)." no se ha creado. Ha habido un error.');</script>");
					}
				} else {
					//Los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();			
				}
			} else {
				//No se han pasado los parametros minimos necesarios para crear un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();			
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo abre la pantalla con los datos de la division pasada por la url
	//El segundo y tercer parametro solo se utilizan para volver a la pantalla consultar con el mismo criterio de filtrado o bien para avanzar o retroceder al siguiente registro.
	function abrirPantallaModificar($idSancion=null, $idCicloLectivo=null, $idAxD=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == '1')){
			//Segunda comprobacion: Que idSancion pasado sea numerico y mayor que cero. Ademas que idCicloLectivo pasado sea numerico y mayor o igual que cero. Lo mismo para el alumno.
			if(is_numeric($idSancion) && $idSancion>0 && is_numeric($idCicloLectivo) && $idCicloLectivo>=0 && is_numeric($idAxD) && $idAxD>=0){
				//Cargo el modelo donde estan los datos de las sanciones registradas
				$this->load->model('m_sancion');
				
				//Busco a la sancion que hay que modificar para comprobar que existe
				$sancion = $this->m_sancion->get($idSancion);
				
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para comprobar que existe
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Cargo el modelo donde estan los datos de los alumnos
				$this->load->model('m_alumnoxdivision');
				
				//Busco al alumno para comprobar que existe
				$alumno = $this->m_alumnoxdivision->get($idAxD);
				
				//Tercera comprobacion: Que la sancion sea existente. Ademas que el ciclo lectivo pasado por la url sea existente o bien el id sea igual a cero. Lo mismo para el alumno.
				if($sancion->num_rows() == 1 && ($cicloLectivo->num_rows() == 1 || $idCicloLectivo==0) && ($alumno->num_rows() == 1 || $idAxD==0)){
					//Le paso la sancion a modificar a la vista
					$datos['sancionSel'] = $sancion;
					
					//Le paso el ciclo lectivo y alumno que estaban seleccionados en la pantalla consultar
					$datos['idCicloLectivoSel'] = $idCicloLectivo;
					$datos['idAxDSel'] = $idAxD;
					
					//Busco a la sancion siguiente de la que hay que modificar
					$idSancionSig = $this->m_sancion->getContiguo($idSancion,1, $idCicloLectivo, $idAxD);
					
					//Le paso la sancion siguiente de la que hay que modificar a la vista
					$datos['idSancionSig'] = $idSancionSig;
					
					//Busco a la sancion anterior de la que hay que modificar
					$idSancionAnt = $this->m_sancion->getContiguo($idSancion,-1, $idCicloLectivo, $idAxD);
									
					//Le paso la sancion anterior de la que hay que modificar a la vista
					$datos['idSancionAnt'] = $idSancionAnt;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de los tipos de sanciones
					$this->load->model('m_tipo_sancion');
					
					//Busco todos los tipos de sanciones activos e inactivos
					$listadoTiposSanciones = $this->m_tipo_sancion->buscar();
					
					//Le paso el listado de todos los tipos de sanciones a la vista para que los muestre en un combo seleccionable
					$datos['tiposSanciones'] = $listadoTiposSanciones;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Restricciones a la consulta de la busqueda de alumnos segun el ciclo lectivo del alumno
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$restriccion = " AND curso.idCicloLectivo=".$sancion->row()->idCicloLectivo;
					
					//Busco todos los alumnos del ciclo segun las restricciones correspondientes, tanto activos como inactivos, menos los borrados(-1)
					$listadoAlumnos = $this->m_alumnoxdivision->buscar($restriccion);
					
					//Le paso el listado de todos los alumnos a la vista para que las muestre en el combo
					$datos['alumnos'] = $listadoAlumnos;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////					
					//Cargo la vista donde se muestra el formulario para modificar una sancion y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_sanciones_modificar',$datos, true);
					
					//Cargo la vista principal con los datos de la vista para modificar un registro
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El o los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Este metodo realmente modifica los datos de una sancion
	function modificar($idSancion=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == '1')){	   
			//Segunda comprobacion: Que se haya pasado por post la fecha de ocurrencia, el tipo de sancion, el alumno sancianoado, el titulo y el estado de la sancion a modificar. 
			//Ademas que se haya pasado por la url el id de la sancion a modificar
			if(is_numeric($idSancion) && $idSancion>0 && $this->input->post('fechaOcurrencia',true)!="" && is_numeric($this->input->post('tipoSancion',true)) && $this->input->post('tipoSancion',true)>0 && is_numeric($this->input->post('alumnoxdivision',true)) && $this->input->post('alumnoxdivision',true)>0 && $this->input->post('titulo',true) != "" && ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){		
				//Cargo el modelo donde estan los datos de las sanciones
				$this->load->model('m_sancion');
				
				//Busco a la sancion que hay que modificar para comprobar que existe
				$sancion = $this->m_sancion->get($idSancion);
				
				//Cargo el modelo donde estan los datos de los tipos de sanciones
				$this->load->model('m_tipo_sancion');
				
				//Busco al tipo de sancion para comprobar que existe
				$tipoSancion = $this->m_tipo_sancion->get($this->input->post('tipoSancion',true));
				
				//Cargo el modelo donde estan los datos de los alumnos de las divisiones
				$this->load->model('m_alumnoxdivision');
				
				//Busco al alumno para comprobar que existe
				$alumno = $this->m_alumnoxdivision->get($this->input->post('alumnoxdivision',true));
				
				//Tercera comprobacion: Que la sancion pasada por la url sea existente. Lo mismo para el tipo de sancion y alumno.
				if($sancion->num_rows() == 1 && $tipoSancion->num_rows() == 1  && $alumno->num_rows() == 1){
					//Guardamos el id del archivo actual. Cero si no tiene asignado ninguno
					$idArchivoActual = $sancion->row()->idArchivo;					
					
					//Resultado 0 quiere decir que nada se ha modificado
					$resultado = 0;
					
					//Cargo el modelo donde estan los datos de los archivos
					$this->load->model('m_archivo');
					
					//Detalles de las configuraciones del archivo a subir
					$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/sanciones";
					$config['allowed_types'] = 'gif|jpg|png|jpeg|doc|docx|xls|xlsx|pdf|ppt|xppt|pps';
					$config['max_size'] = '10000';
					$this->load->library('upload', $config);
					
					$archivo = '';
					//Si no se subio el archivo hacer lo siguiente
					if (!$this->upload->do_upload('archivo')){
						$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones.';
					//Si se subio el archivo hacer lo siguiente
					}else{
						//Datos del archivo subido
						$upload_data = $this->upload->data();
						$archivo = $upload_data['file_name'];
						$extensionArchivo = $upload_data['file_ext'];
						
						//Mensaje que se va a mostrar
						$mensaje = 'Se ha subido el archivo correctamente.';
						
						// Determine Content Type
						switch ($upload_data['file_ext']) {
						  case ".pdf": $ctype="application/pdf"; break; 
						  case ".exe": $ctype="application/octet-stream"; break; 
						  case ".zip": $ctype="application/zip"; break; 
						  case ".doc": $ctype="application/msword"; break; 
						  case ".xls": $ctype="application/vnd.ms-excel"; break; 
						  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break; 
						  case ".gif": $ctype="image/gif"; break; 
						  case ".png": $ctype="image/png"; break; 
						  case ".jpeg": 
						  case ".jpg": $ctype="image/jpg"; break; 
						  default: $ctype="application/force-download"; 
						}
						
						//Si ya tenia archivo lo modificamos, si no tenia, creamos un nuevo registro en la base de datos
						$nuevoHash = random_string('alnum',20).$upload_data['file_ext'];
																		
						if($idArchivoActual != 0){
							//Modificamos el archivo en la base de datos
							$resultado += $this->m_archivo->modificar($idArchivoActual, $nuevoHash, $upload_data['file_name'], $upload_data['file_ext'], $ctype);
						}else{
							//Creamos el archivo en la base de datos
							$resultado += $this->m_archivo->crear($nuevoHash, $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/sanciones", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
							$idArchivoActual = $this->db->insert_id();
						}
					}					
					
					//Formato fecha ARGENTINA
					$fecha1=$this->input->post('fechaOcurrencia',true);
					//Formato fecha EEUU
					if($fecha1!="")$fecha2=date("Y-m-d",strtotime($fecha1));
					else $fecha2=null;
					
					//Modificamos la sancion
					$resultado += $this->m_sancion->modificar($idSancion, $fecha2, $this->input->post('tipoSancion',true), $this->input->post('alumnoxdivision',true), $this->input->post('titulo',true), $this->input->post('descripcion',true), $idArchivoActual, $this->input->post('estado',true));
					
					if($archivo != '')	echo("<script> window.parent.actualizarArchivo('".base_url() .'archivo/hash/'.$nuevoHash."');</script>");
					
					if($resultado >= 1){
						//Cargo el modelo donde estan los datos del timeline para cargar la novedad.
						$this->load->model('m_timeline');
						
						//Creamos el registro de la novedad. TipoOperacion, idTablaOrigen, idRegistroOrigen, idTablaDestino, idRegistroDestino, fechaPasada, fechaFutura, estado
						$this->m_timeline->crear(2, 1, $idSancion, 21, $alumno->row()->idAlumno, date("Y-m-d H:i:s"), null, 1);
						
						echo("<script> alert('La sanci\u00f3n: ".$this->input->post('titulo',true)." se ha modificado correctamente. ".$mensaje."');</script>");
					}else{
						echo("<script> alert('La sanci\u00f3n: ".$this->input->post('titulo',true)." no se ha modificado. Ha habido un error o los datos permanecieron iguales.');</script>");
					}
				} else {
					//El o los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
}